import { EntitySchema } from 'typeorm'
import dayjs from 'dayjs'

export const Article = new EntitySchema({
  name: 'Article',
  columns: {
    id: {
      type: 'varchar',
      primary: true,
      generated: 'uuid',
      comment: '文章id'
    },

    title: {
      type: 'varchar',
      length: 200,
      comment: '标题'
    },
    titleType: {
      type: 'int',
      comment: '标题类型 1-文章id作为入口 2-文章标题'
    },
    summary: {
      type: 'varchar',
      length: 200,
      comment: '文章摘要',
      nullable: true
    },
    content: {
      type: 'text',
      comment: '内容'
    },
    createTime: {
      type: 'datetime',
      comment: '创建时间',
      default: () => 'CURRENT_TIMESTAMP',
      transformer: {
        from(val) {
          return dayjs(val).format('YYYY-MM-DD HH:mm:ss')
        },
        to(val) {
          return val
        }
      }
    },
    updateTime: {
      type: 'datetime',
      comment: '更新时间',
      updateDate: true,
      transformer: {
        from(val) {
          return dayjs(val).format('YYYY-MM-DD HH:mm:ss')
        },
        to(val) {
          return val
        }
      }
    },
    status: {
      type: 'int',
      comment: '状态 0-禁用 1-启用',
      default: 1
    },
    cover: {
      type: 'varchar',
      comment: '封面',
      nullable: true
    },
    keyword: {
      type: 'varchar',
      comment: '关键词',
      nullable: true
    },
    description: {
      type: 'varchar',
      comment: '关键词',
      nullable: true
    }
  },
  relations: {
    tags: {
      target: 'Tag',
      type: 'many-to-many',
      // 不创建外键约束
      // createForeignKeyConstraints: false,
      // 反向关系是 Article 实体中的 tags 属性
      inverseSide: 'articles',

      // 表明需要一个中间表来管理多对多关系
      // joinTable: true
      joinTable: {
        // 指定中间表名称 不需要typeorm自动生成
        name: 'article_tags',
        joinColumn: {
          // 中间表的名称
          name: 'article_id',
          // 指向 Article表里面的主键
          referencedColumnName: 'id'
        },
        inverseJoinColumn: {
          name: 'tag_id',
          // 指向 Tag表里面的主键
          referencedColumnName: 'tag_id'
        }
      }
    }
  }
})
